]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
dnd: Don't override fixed position if actor had no fixed position before
authorJonas Dreßler <verdre@v0yd.nl>
Tue, 9 Jun 2020 16:29:02 +0000 (18:29 +0200)
committerJonas Dreßler <verdre@v0yd.nl>
Wed, 17 Jun 2020 08:46:46 +0000 (10:46 +0200)
Properly handle drag actors which are not allocated using a fixed
position and disable the fixed position we were using to move the actor
around before we reparent it again to its original parent.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1310

js/ui/dnd.js

index cb72737f1c118174665e33555393b3145dd69874..942786d92a39ea9512bc4c986ae7151345e8d4c5 100644 (file)
@@ -375,8 +375,9 @@ var _Draggable = class _Draggable {
 
             this._dragActorSource = undefined;
             this._dragOrigParent = this.actor.get_parent();
-            this._dragOrigX = this._dragActor.x;
-            this._dragOrigY = this._dragActor.y;
+            this._dragActorHadFixedPos = this._dragActor.fixed_position_set;
+            this._dragOrigX = this._dragActor.allocation.x1;
+            this._dragOrigY = this._dragActor.allocation.y1;
             this._dragOrigScale = this._dragActor.scale_x;
 
             // Set the actor's scale such that it will keep the same
@@ -718,7 +719,10 @@ var _Draggable = class _Draggable {
             Main.uiGroup.remove_child(this._dragActor);
             this._dragOrigParent.add_actor(this._dragActor);
             dragActor.set_scale(this._dragOrigScale, this._dragOrigScale);
-            dragActor.set_position(this._dragOrigX, this._dragOrigY);
+            if (this._dragActorHadFixedPos)
+                dragActor.set_position(this._dragOrigX, this._dragOrigY);
+            else
+                dragActor.fixed_position_set = false;
         } else {
             dragActor.destroy();
         }